#include<stdio.h>
#include<stdlib.h>
typedef struct{
	int x;
	int y;
	int i;
}stack;

int chess[12][12]={0};
int cnt=0;
int move[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};

void Horse( )
{
	stack * s;
	int x,y,a,b,i,top=0;
	s=(stack *)malloc(64*sizeof(stack));
	s[top].x=s[top].y=2;
	i=0;
	cnt=1;
	chess[2][2]=1;
	while(cnt<64)
	{
		for(;i<8;i++)
		{
			a=s[top].x+move[i][0];
			b=s[top].y+move[i][1];
			if(!chess[a][b])
			{
				chess[a][b]=++cnt;
				s[top].i=i;
				top++; 
				s[top].x=a;
				s[top].y=b;
				i=0;
				break;
			}
		}
		if(i==8)
		{
			top--;
			cnt--;
			chess[s[top+1].x][s[top+1].y]=0;
			i=s[top].i+1;
		}
	}
}
void OutChess( )
{
	int i,j;
	for(i=2;i<10;i++)
	{
		for(j=2;j<10;j++)
		{
			printf("%3d",chess[i][j]);
		}
		printf("\n");
	}
}
int main(void)
{
	int i,j;
	for(i=0;i<12;i++)
	{
		for(j=0;j<12;j++)
		   if(i<2||i>9||j<2||j>9)
		     chess[i][j]=-1;
	}
	
	Horse( );
	OutChess( );
	return 0;
}
